package chapter19;

import java.util.LinkedList;
import java.util.List;
import java.util.Objects;

public class Node {

    // 数值
    public int key;
    public Node Node;
    public Node p = this;
    public Node left = this;
    public Node right = this;
    // 孩子的数目
    public int degree;
    // 自从成为另一个节点的孩子之后,有没有再失去孩子
    public boolean mark;
    //
    public List<Node> child = new LinkedList<>();

    public Node(int key) {
        this.key = key;
    }

    public Node() {
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("Node{");
        sb.append("key=").append(key).append(",degree=").append(degree).append(",mark=").append(mark);
//        if (child != null && child.size() > 0) {
//            sb.append(",child=").append(child);
//        }
//        if (p != null) {
//            sb.append(",p=").append(p);
//        }
//        if (left != null) {
//            sb.append(",left=").append(left.key);
//        }
//        if (right != null) {
//            sb.append(",right=").append(right.key);
//        }
//        if (min != null) {
//            sb.append(",min=").append(min);
//        }
//        if (root != null && root.size() > 0) {
//            sb.append(",root=").append(root);
//        }

        sb.append("}");
        return sb.toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Node node = (Node) o;
        return key == node.key;
    }

    @Override
    public int hashCode() {
        return Objects.hash(key);
    }
}
